home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / aliencontrol.s < prev    next >
Text File  |  1997-11-28  |  10KB  |  636 lines

  1.  
  2. gotgun: dc.w 0
  3.  
  4.  INCLUDE "ab3:source_4000/NEWALIEN.s"
  5. **************************************
  6.  INCLUDE "ab3:source_4000/FlyingScalyBall.s"
  7. **************************************
  8.  INCLUDE "ab3:source_4000/BigUglyAlien.s"
  9. **************************************
  10.  INCLUDE "ab3:source_4000/MutantMarine.s"
  11. **************************************
  12.  INCLUDE "ab3:source_4000/ToughMarine.s"
  13. ASKFORPROT:
  14.  include "ab3:source_4000/askforprot.s"
  15.  
  16. **************************************
  17.  INCLUDE "ab3:source_4000/halfworm.s"
  18. **************************************
  19.  INCLUDE "ab3:source_4000/bigredthing.s"
  20. **************************************
  21.  INCLUDE "ab3:source_4000/tree.s"
  22. **************************************
  23.  INCLUDE "ab3:source_4000/EyeBall.s"
  24. **************************************
  25.  INCLUDE "ab3:source_4000/FlameMarine.s"
  26.  
  27.  
  28. **************************************
  29.  INCLUDE "ab3:source_4000/Robot.s"
  30.  
  31. THISPLRxoff: dc.w 0
  32. THISPLRzoff: dc.w 0
  33.  
  34. ViewpointToDraw:
  35. ; Calculate which side to display:
  36.  
  37.  move.l ObjectPoints,a1
  38.  move.w (a0),d1
  39.  lea (a1,d1.w*8),a1    ; ptr to points 
  40.  
  41.  move.w (a1),oldx
  42.  move.w 4(a1),oldz
  43.  move.w THISPLRxoff,newx
  44.  move.w THISPLRzoff,newz
  45.  move.w #64,speed
  46.  move.w #-60,Range
  47.  movem.l a0/a1,-(a7)
  48.  jsr HeadTowards
  49.  movem.l (a7)+,a0/a1
  50.  
  51.  move.w newx,d0
  52.  sub.w oldx,d0
  53.  move.w newz,d1
  54.  sub.w oldz,d1
  55.  move.w Facing(a0),d3
  56.  add.w #1024,d3
  57.  and.w #8190,d3
  58.  move.l #SineTable,a2
  59.  move.w (a2,d3.w),d2
  60.  adda.w #2048,a2
  61.  move.w (a2,d3.w),d3
  62.  
  63.  move.w d0,d4
  64.  move.w d1,d5
  65.  muls d3,d4
  66.  muls d2,d5
  67.  sub.l d5,d4
  68.  muls d3,d1
  69.  muls d2,d0
  70.  add.l d1,d0
  71.  
  72.  tst.l d0
  73.  bgt.s FacingTowardsPlayer
  74. FAP:
  75.  tst.l d4
  76.  bgt.s FAPR
  77.  cmp.l d4,d0
  78.  bgt.s LEFTFRAME
  79.  bra.s AWAYFRAME
  80.  
  81. FAPR:
  82.  neg.l d0
  83.  cmp.l d0,d4
  84.  bgt.s RIGHTFRAME
  85.  bra.s AWAYFRAME
  86.  
  87. FacingTowardsPlayer
  88.  
  89.  tst.l d4
  90.  bgt.s FTPR
  91.  neg.l d4
  92.  cmp.l d0,d4
  93.  bgt.s LEFTFRAME
  94.  bra.s TOWARDSFRAME
  95.  
  96. FTPR:
  97.  cmp.l d0,d4
  98.  bgt.s RIGHTFRAME
  99. TOWARDSFRAME:
  100.  move.l #0,d0
  101.  rts
  102. RIGHTFRAME:
  103.  move.l #1,d0
  104.  rts
  105. LEFTFRAME:
  106.  move.l #3,d0
  107.  rts
  108. AWAYFRAME:
  109.  move.l #2,d0
  110.  rts
  111.  
  112. deadframe: dc.l 0
  113. screamsound: dc.w 0
  114. nasheight: dc.w 0
  115. tempcos: dc.w 0
  116. tempsin: dc.w 0
  117. tempx: dc.w 0
  118. tempz: dc.w 0
  119.  
  120. RunAround:
  121.  
  122.  movem.l d0/d1/d2/d3/a0/a1,-(a7)
  123.  
  124.  move.w oldx,d0
  125.  sub.w newx,d0    ; dx
  126.  asr.w #1,d0
  127.  move.w oldz,d1
  128.  sub.w newz,d1    ; dz
  129.  asr.w #1,d1
  130.  
  131.  move.l ObjectPoints,a1
  132.  move.w (a0),d2
  133.  lea (a1,d2.w*8),a1
  134.  move.w (a1),d2
  135.  sub.w tempx,d2
  136.  move.w 4(a1),d3
  137.  sub.w tempz,d3
  138.  
  139.  muls tempcos,d2
  140.  muls tempsin,d3
  141.  sub.l d3,d2
  142.  
  143.  blt.s headleft
  144.  neg.w d0
  145.  neg.w d1
  146. headleft:
  147.  sub.w d1,newx
  148.  add.w d0,newz
  149.  
  150.  movem.l (a7)+,d0/d1/d2/d3/a0/a1
  151.  rts
  152.  
  153. bbbb: dc.w 0
  154. tsx: dc.w 0
  155. tsz: dc.w 0
  156. fsx: dc.w 0
  157. fsz: dc.w 0
  158.  
  159. SHOOTPLAYER1
  160.  
  161.  move.w oldx,tsx
  162.  move.w oldz,tsz
  163.  move.w newx,fsx
  164.  move.w oldx,fsz
  165.  
  166.  move.w p1_xoff,newx
  167.  move.w p1_zoff,newz
  168.  move.w (a1),oldx
  169.  move.w 4(a1),oldz
  170.  
  171.  move.w newx,d1
  172.  sub.w oldx,d1
  173.  move.w newz,d2
  174.  sub.w oldz,d2
  175.  jsr GetRand
  176.  asr.w #4,d0
  177.  muls d0,d1
  178.  muls d0,d2
  179.  swap d1
  180.  swap d2
  181.  add.w d1,newz
  182.  sub.w d2,newx
  183.  
  184.  move.l p1_yoff,d1
  185.  add.l #15*128,d1
  186.  asr.l #7,d1
  187.  move.w d1,d2
  188.  muls d0,d2
  189.  swap d2
  190.  add.w d2,d1
  191.  ext.l d1
  192.  asl.l #7,d1
  193.  move.l d1,newy
  194.  move.w 4(a0),d1
  195.  ext.l d1
  196.  asl.l #7,d1
  197.  move.l d1,oldy
  198.  
  199.  move.b ObjInTop(a0),StoodInTop
  200.  
  201.  st exitfirst
  202.  move.w #0,extlen
  203.  move.b #$ff,awayfromwall
  204.  move.w #%0000010000000000,wallflags
  205.  move.l #0,StepUpVal
  206.  move.l #$1000000,StepDownVal
  207.  move.l #0,thingheight
  208.  move.l objroom,-(a7)
  209.  movem.l d0-d7/a0-a6,-(a7)
  210.  
  211. .again:
  212.  jsr MoveObject
  213.  tst.b hitwall
  214.  bne.s .nofurther
  215.  move.w newx,d0
  216.  sub.w oldx,d0
  217.  add.w d0,oldx
  218.  add.w d0,newx
  219.  move.w newz,d0
  220.  sub.w oldz,d0
  221.  add.w d0,oldz
  222.  add.w d0,newz
  223.  move.l newy,d0
  224.  sub.l oldy,d0
  225.  add.l d0,oldy
  226.  add.l d0,newy
  227.  bra .again
  228.  
  229. .nofurther:
  230.  
  231.  move.l objroom,backroom
  232.  
  233.  movem.l (a7)+,d0-d7/a0-a6
  234.  move.l (a7)+,objroom
  235.  
  236.  move.l PlayerShotData,a0
  237.  move.w #19,d1
  238. .findonefree2
  239.  move.w 12(a0),d2
  240.  blt.s .foundonefree2
  241.  adda.w #64,a0
  242.  dbra d1,.findonefree2
  243.  
  244.  move.w tsx,oldx
  245.  move.w tsz,oldz
  246.  move.w fsx,newx
  247.  move.w fsz,oldx
  248.  
  249.  rts
  250.  
  251. .foundonefree2:
  252.  
  253.  move.l ObjectPoints,a1
  254.  move.w (a0),d2
  255.  move.w newx,(a1,d2.w*8)
  256.  move.w newz,4(a1,d2.w*8)
  257.  move.b #1,shotstatus(a0)
  258.  move.w #0,shotgrav(a0)
  259.  move.b #0,shotsize(a0)
  260.  move.b #0,shotanim(a0)
  261.  
  262.  move.l backroom,a1
  263.  move.w (a1),12(a0)
  264.  st worry(a0)
  265.  move.l wallhitheight,d0
  266.  move.l d0,accypos(a0)
  267.  asr.l #7,d0
  268.  move.w d0,4(a0)
  269.  
  270.  move.w tsx,oldx
  271.  move.w tsz,oldz
  272.  move.w fsx,newx
  273.  move.w fsz,oldx
  274.  
  275.  rts
  276.  
  277. futurex: dc.w 0
  278. futurez: dc.w 0
  279.  
  280. FireAtPlayer1:
  281.  move.l NastyShotData,a5
  282.  move.w #19,d1
  283. .findonefree
  284.  move.w 12(a5),d0
  285.  blt.s .foundonefree
  286.  adda.w #64,a5
  287.  dbra d1,.findonefree
  288.  
  289.  bra .cantshoot
  290.  
  291. .foundonefree:
  292.  
  293.  move.b #2,16(a5)
  294.  
  295.  move.l #ObjRotated,a6
  296.  move.w (a0),d0
  297.  lea (a6,d0.w*8),a6
  298.  
  299.  move.l (a6),Noisex
  300.  move.w #100,Noisevol
  301.  move.b #1,chanpick
  302.  clr.b notifplaying
  303.  move.b SHOTTYPE,d0
  304.  move.w #0,shotlife(a5)
  305.  move.b d0,shotsize(a5)
  306.  move.b SHOTPOWER,shotpower(a5)
  307.  movem.l a5/a1/a0,-(a7)
  308.  move.b 1(a0),IDNUM
  309.  jsr MakeSomeNoise
  310.  movem.l (a7)+,a5/a1/a0
  311.  
  312.  move.l ObjectPoints,a2
  313.  move.w (a5),d1
  314.  lea (a2,d1.w*8),a2
  315.  move.w (a1),oldx
  316.  move.w 4(a1),oldz
  317.  move.w PLR1_xoff,newx
  318.  move.w PLR1_zoff,newz
  319.  
  320.  jsr CalcDist
  321.  move.w XDIFF1,d6
  322.  muls distaway,d6
  323.  divs SHOTSPEED,d6
  324.  asr.w #4,d6
  325.  add.w d6,newx
  326.  move.w ZDIFF1,d6
  327.  muls distaway,d6
  328.  divs SHOTSPEED,d6
  329.  asr.w #4,d6
  330.  add.w d6,newz
  331.  move.w newx,futurex
  332.  move.w newz,futurez
  333.  
  334.  move.w SHOTSPEED,speed
  335.  move.w #0,Range
  336.  jsr HeadTowards
  337.  
  338.  move.w newx,d0
  339.  sub.w oldx,d0
  340.  move.w newz,d1
  341.  sub.w oldz,d1
  342.  move.w SHOTOFFMULT,d2
  343.  beq.s .nooffset
  344.  
  345.  muls d2,d0
  346.  muls d2,d1
  347.  asr.l #8,d0
  348.  asr.l #8,d1
  349.  add.w d1,oldx
  350.  sub.w d0,oldz
  351.  move.w futurex,newx
  352.  move.w futurez,newz
  353.  jsr HeadTowards
  354.  
  355. .nooffset:
  356.  
  357.  move.w newx,d0
  358.  move.w d0,(a2)
  359.  sub.w oldx,d0
  360.  move.w d0,shotxvel(a5)
  361.  move.w newz,d0
  362.  move.w d0,4(a2)
  363.  sub.w oldz,d0
  364.  move.w d0,shotzvel(a5)
  365.  
  366.  move.l #%100000100000,EnemyFlags(a5)
  367.  move.w 12(a0),12(a5)
  368.  move.w 4(a0),d0
  369.  move.w d0,4(a5)
  370.  ext.l d0
  371.  asl.l #7,d0
  372.  add.l SHOTYOFF,d0
  373.  move.l d0,accypos(a5)
  374.  move.b SHOTINTOP,ObjInTop(a5)
  375.  move.l PLR1_Obj,a2
  376.  move.w 4(a2),d1
  377.  sub.w #20,d1
  378.  ext.l d1
  379.  asl.l #7,d1
  380.  sub.l d0,d1
  381.  add.l d1,d1
  382.  move.w distaway,d0 
  383.   
  384.  move.w SHOTSHIFT,d2
  385.  asr.w d2,d0
  386.  tst.w d0
  387.  bgt.s .okokokok
  388.  moveq #1,d0
  389. .okokokok
  390.  
  391.  divs d0,d1
  392.  move.w d1,shotyvel(a5)
  393.  st worry(a5)
  394.  
  395.  move.l GunData,a6
  396.  moveq #0,d0
  397.  move.b SHOTTYPE,d0 
  398.  asl.w #5,d0
  399.  add.w d0,a6
  400.  move.w 16(a6),shotgrav(a5)
  401.  move.w 18(a6),shotflags(a5)
  402. ; move.w 20(a6),d0
  403. ; add.w d0,shotyvel(a5)
  404.  
  405. .cantshoot
  406.  rts
  407.  
  408.  
  409. SHOOTPLAYER2
  410.  
  411.  move.w oldx,tsx
  412.  move.w oldz,tsz
  413.  move.w newx,fsx
  414.  move.w oldx,fsz
  415.  
  416.  move.w p2_xoff,newx
  417.  move.w p2_zoff,newz
  418.  move.w (a1),oldx
  419.  move.w 4(a1),oldz
  420.  
  421.  move.w newx,d1
  422.  sub.w oldx,d1
  423.  move.w newz,d2
  424.  sub.w oldz,d2
  425.  jsr GetRand
  426.  asr.w #4,d0
  427.  muls d0,d1
  428.  muls d0,d2
  429.  swap d1
  430.  swap d2
  431.  add.w d1,newz
  432.  sub.w d2,newx
  433.  
  434.  move.l p2_yoff,d1
  435.  add.l #15*128,d1
  436.  asr.l #7,d1
  437.  move.w d1,d2
  438.  muls d0,d2
  439.  swap d2
  440.  add.w d2,d1
  441.  ext.l d1
  442.  asl.l #7,d1
  443.  move.l d1,newy
  444.  move.w 4(a0),d1
  445.  ext.l d1
  446.  asl.l #7,d1
  447.  move.l d1,oldy
  448.  move.b ObjInTop(a0),StoodInTop
  449.  
  450.  st exitfirst
  451.  move.w #0,extlen
  452.  move.b #$ff,awayfromwall
  453.  move.w #%0000010000000000,wallflags
  454.  move.l #0,StepUpVal
  455.  move.l #$1000000,StepDownVal
  456.  move.l #0,thingheight
  457.  move.l objroom,-(a7)
  458.  movem.l d0-d7/a0-a6,-(a7)
  459.  
  460. .again:
  461.  jsr MoveObject
  462.  tst.b hitwall
  463.  bne.s .nofurther
  464.  move.w newx,d0
  465.  sub.w oldx,d0
  466.  add.w d0,oldx
  467.  add.w d0,newx
  468.  move.w newz,d0
  469.  sub.w oldz,d0
  470.  add.w d0,oldz
  471.  add.w d0,newz
  472.  move.l newy,d0
  473.  sub.l oldy,d0
  474.  add.l d0,oldy
  475.  add.l d0,newy
  476.  bra .again
  477.  
  478. .nofurther:
  479.  
  480.  move.l objroom,backroom
  481.  
  482.  movem.l (a7)+,d0-d7/a0-a6
  483.  move.l (a7)+,objroom
  484.  
  485.  move.l NastyShotData,a0
  486.  move.w #19,d1
  487. .findonefree2
  488.  move.w 12(a0),d2
  489.  blt.s .foundonefree2
  490.  adda.w #64,a0
  491.  dbra d1,.findonefree2
  492.  
  493.  move.w tsx,oldx
  494.  move.w tsz,oldz
  495.  move.w fsx,newx
  496.  move.w fsz,oldx
  497.  
  498.  rts
  499.  
  500. .foundonefree2:
  501.  
  502.  move.l ObjectPoints,a1
  503.  move.w (a0),d2
  504.  move.w newx,(a1,d2.w*8)
  505.  move.w newz,4(a1,d2.w*8)
  506.  move.b #1,shotstatus(a0)
  507.  move.w #0,shotgrav(a0)
  508.  move.b #0,shotsize(a0)
  509.  move.b #0,shotanim(a0)
  510.  
  511.  move.l backroom,a1
  512.  move.w (a1),12(a0)
  513.  st worry(a0)
  514.  move.l wallhitheight,d0
  515.  move.l d0,accypos(a0)
  516.  asr.l #7,d0
  517.  move.w d0,4(a0)
  518.  
  519.  move.w tsx,oldx
  520.  move.w tsz,oldz
  521.  move.w fsx,newx
  522.  move.w fsz,oldx
  523.  
  524.  rts
  525.  
  526. FireAtPlayer2:
  527.  move.l NastyShotData,a5
  528.  move.w #19,d1
  529. .findonefree
  530.  move.w 12(a5),d0
  531.  blt.s .foundonefree
  532.  adda.w #64,a5
  533.  dbra d1,.findonefree
  534.  
  535.  bra .cantshoot
  536.  
  537. .foundonefree:
  538.  
  539.  move.b #2,16(a5)
  540.  
  541.  move.l #ObjRotated,a6
  542.  move.w (a0),d0
  543.  lea (a6,d0.w*8),a6
  544.  
  545.  move.l (a6),Noisex
  546.  move.w #100,Noisevol
  547.  move.b #1,chanpick
  548.  clr.b notifplaying
  549.  move.b SHOTPOWER,d0
  550.  move.w #0,shotlife(a5)
  551.  move.b d0,shotsize(a5)
  552.  move.b SHOTPOWER,shotpower(a5)
  553.  movem.l a5/a1/a0,-(a7)
  554.  move.b 1(a0),IDNUM
  555.  jsr MakeSomeNoise
  556.  movem.l (a7)+,a5/a1/a0
  557.  
  558.  move.l ObjectPoints,a2
  559.  move.w (a5),d1
  560.  lea (a2,d1.w*8),a2
  561.  move.w (a1),oldx
  562.  move.w 4(a1),oldz
  563.  move.w PLR2_xoff,newx
  564.  move.w PLR2_zoff,newz
  565.  move.w SHOTSPEED,speed
  566.  move.w #0,Range
  567.  jsr HeadTowards
  568.  
  569.  move.w newx,d0
  570.  sub.w oldx,d0
  571.  move.w newz,d1
  572.  sub.w oldz,d1
  573.  move.w SHOTOFFMULT,d2
  574.  beq.s .nooffset
  575.  
  576.  muls d2,d0
  577.  muls d2,d1
  578.  asr.l #8,d0
  579.  asr.l #8,d1
  580.  add.w d1,oldx
  581.  sub.w d0,oldz
  582.  move.w PLR2_xoff,newx
  583.  move.w PLR2_zoff,newz
  584.  jsr HeadTowards
  585.  
  586. .nooffset:
  587.  
  588.  
  589.  move.w newx,d0
  590.  move.w d0,(a2)
  591.  sub.w oldx,d0
  592.  move.w d0,shotxvel(a5)
  593.  move.w newz,d0
  594.  move.w d0,4(a2)
  595.  sub.w oldz,d0
  596.  move.w d0,shotzvel(a5)
  597.  
  598.  move.l #%100000100000,EnemyFlags(a5)
  599.  move.w 12(a0),12(a5)
  600.  move.w 4(a0),d0
  601.  move.w d0,4(a5)
  602.  ext.l d0
  603.  asl.l #7,d0
  604.  add.l SHOTYOFF,d0
  605.  move.l d0,accypos(a5)
  606.  move.b SHOTINTOP,ObjInTop(a5)
  607.  move.l PLR2_Obj,a2
  608.  move.w 4(a2),d1
  609.  sub.w #20,d1
  610.  ext.l d1
  611.  asl.l #7,d1
  612.  sub.l d0,d1
  613.  add.l d1,d1
  614.  move.w distaway,d0
  615.  move.w SHOTSHIFT,d2
  616.  asr.w d2,d0
  617.  tst.w d0
  618.  bgt.s .okokokok
  619.  moveq #1,d0
  620. .okokokok
  621.  divs d0,d1
  622.  move.w d1,shotyvel(a5)
  623.  st worry(a5)
  624.  move.w #0,shotgrav(a5)
  625. .cantshoot
  626.  rts
  627.  
  628. SHOTYOFF: dc.l 0
  629. SHOTTYPE: dc.w 0
  630. SHOTPOWER: dc.w 0
  631. SHOTSPEED: dc.w 0
  632. SHOTOFFMULT: dc.w 0
  633. SHOTSHIFT: dc.w 0
  634. SHOTINTOP: dc.w 0
  635.  
  636. backroom: dc.l 0